#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "Engine/EngineBaseTypes.h"
#include "Data/SaveInfoStruct.h"
#include "Data/CommenStruct.h"
#include "GameKitFL.generated.h"


class UUserWidget;
class UWidgetAnimation;
class USlotBasedSaveGame;
UCLASS()
class MISCELLANEOUSPROJECT_API UGameKitFL : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()
public:

	static EGameState GetCurrentGameState();

	static bool GameStateTransition(EGameState DesiredGameState);
	static void SwitchInputMode(UUserWidget* WidgetToFocus, const EMouseLockMode& MouseLockMode, const EInputMode& InputMode);
	static float CalculateAnimationCurrentTime(UUserWidget* SelfReference, const UWidgetAnimation* InAnimation);
	UFUNCTION(BlueprintCallable, Category = MissionComponent)
	static void SaveCurrentGame(USlotBasedSaveGame* SaveGameObject, const FString& ToSlot);

	static USlotBasedSaveGame* LoadSpecificSlot(const FString& SlotName);
	static FString GetCurrentlyPlayingSlot();

	static FSavedPlayerInfo GetPlayerSaveData();
	UFUNCTION(BlueprintCallable, Category = MissionComponent)
	static void UpdatePlayerSaveData(const FSavedPlayerInfo& PlayerInfo);

	static void UpdateGameplaySaveData(const FSavedGameplayInfo& PlayerInfo);

	static FSavedGameplayInfo GetGameplaySaveData();
	UFUNCTION(BlueprintCallable, Category = MissionComponent)
	static void CreateNewGame(USlotBasedSaveGame*& OutSaveGameObject, FString& OutCreatedSlot);
	UFUNCTION(BlueprintCallable, Category = MissionComponent)
	static TArray<FString> FindSavedGames();

	static void SwitchInteractionType(const EInteractionType& InteractionType);

	static EInteractionType AvailableInteractionType();
	static void RequestInteraction();

	static void UpdateMissionComponentSaveData(FSavedMissionComponent MissionComponent);

	static FSavedMissionComponent GetMissionComponentSaveData();
	static bool InGameMenuOpened();
};
